home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / AIncludes / Endian.a < prev    next >
Encoding:
Text File  |  1998-02-12  |  3.7 KB  |  161 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        Endian.a
  3. ;
  4. ;    Contains:    QuickTime Interfaces
  5. ;
  6. ;    Version:    Technology:    QuickTime 3.0
  7. ;                Release:    Universal Interfaces 3.1
  8. ;
  9. ;    Copyright:    © 1997-1998 by Apple Computer, Inc., all rights reserved
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__ENDIAN__') = 'UNDEFINED' THEN
  19. __ENDIAN__ SET 1
  20.  
  21.     IF &TYPE('__CONDITIONALMACROS__') = 'UNDEFINED' THEN
  22.     include 'ConditionalMacros.a'
  23.     ENDIF
  24.     IF &TYPE('__MACTYPES__') = 'UNDEFINED' THEN
  25.     include 'MacTypes.a'
  26.     ENDIF
  27.  
  28.  
  29. ;   These types are used for structures that contain data that is
  30. ;   always in BigEndian format.  This extra typing prevents little
  31. ;   endian code from directly changing the data, thus saving much
  32. ;   time in the debugger.
  33.  
  34.  
  35.     IF TARGET_RT_LITTLE_ENDIAN THEN
  36. BigEndianLong            RECORD 0
  37. bigEndianValue             ds.l    1                ; offset: $0 (0)
  38. sizeof                     EQU *                    ; size:   $4 (4)
  39.                         ENDR
  40. BigEndianUnsignedLong    RECORD 0
  41. bigEndianValue             ds.l    1                ; offset: $0 (0)
  42. sizeof                     EQU *                    ; size:   $4 (4)
  43.                         ENDR
  44. BigEndianShort            RECORD 0
  45. bigEndianValue             ds.w    1                ; offset: $0 (0)
  46. sizeof                     EQU *                    ; size:   $2 (2)
  47.                         ENDR
  48. BigEndianUnsignedShort    RECORD 0
  49. bigEndianValue             ds.w    1                ; offset: $0 (0)
  50. sizeof                     EQU *                    ; size:   $2 (2)
  51.                         ENDR
  52. BigEndianFixed            RECORD 0
  53. bigEndianValue             ds.l    1                ; offset: $0 (0)
  54. sizeof                     EQU *                    ; size:   $4 (4)
  55.                         ENDR
  56. BigEndianUnsignedFixed    RECORD 0
  57. bigEndianValue             ds.l    1                ; offset: $0 (0)
  58. sizeof                     EQU *                    ; size:   $4 (4)
  59.                         ENDR
  60. BigEndianOSType            RECORD 0
  61. bigEndianValue             ds.l    1                ; offset: $0 (0)
  62. sizeof                     EQU *                    ; size:   $4 (4)
  63.                         ENDR
  64.     ELSE
  65. BigEndianLong            RECORD 0
  66. bigEndianValue             ds.l    1                ; offset: $0 (0)
  67. sizeof                     EQU *                    ; size:   $4 (4)
  68.                         ENDR
  69. BigEndianUnsignedLong    RECORD 0
  70. bigEndianValue             ds.l    1                ; offset: $0 (0)
  71. sizeof                     EQU *                    ; size:   $4 (4)
  72.                         ENDR
  73. BigEndianShort            RECORD 0
  74. bigEndianValue             ds.w    1                ; offset: $0 (0)
  75. sizeof                     EQU *                    ; size:   $2 (2)
  76.                         ENDR
  77. BigEndianUnsignedShort    RECORD 0
  78. bigEndianValue             ds.w    1                ; offset: $0 (0)
  79. sizeof                     EQU *                    ; size:   $2 (2)
  80.                         ENDR
  81. BigEndianFixed            RECORD 0
  82. bigEndianValue             ds.l    1                ; offset: $0 (0)
  83. sizeof                     EQU *                    ; size:   $4 (4)
  84.                         ENDR
  85. BigEndianUnsignedFixed    RECORD 0
  86. bigEndianValue             ds.l    1                ; offset: $0 (0)
  87. sizeof                     EQU *                    ; size:   $4 (4)
  88.                         ENDR
  89. BigEndianOSType            RECORD 0
  90. bigEndianValue             ds.l    1                ; offset: $0 (0)
  91. sizeof                     EQU *                    ; size:   $4 (4)
  92.                         ENDR
  93. ; typedef long                             BigEndianLong
  94.  
  95. ; typedef unsigned long                 BigEndianUnsignedLong
  96.  
  97. ; typedef short                         BigEndianShort
  98.  
  99. ; typedef unsigned short                 BigEndianUnsignedShort
  100.  
  101. ; typedef Fixed                         BigEndianFixed
  102.  
  103. ; typedef UnsignedFixed                 BigEndianUnsignedFixed
  104.  
  105. ; typedef OSType                         BigEndianOSType
  106.  
  107.     ENDIF    ; TARGET_RT_LITTLE_ENDIAN
  108.  
  109.  
  110.  
  111.  
  112. ;    Implement low level ≈_Swap functions.
  113. ;    
  114. ;        extern UInt16 Endian16_Swap(UInt16 value);
  115. ;        extern UInt32 Endian32_Swap(UInt32 value);
  116. ;        extern UInt64 Endian64_Swap(UInt64 value);
  117. ;        
  118. ;    Note: Depending on the processor, you might want to implement
  119. ;          these as function calls instead of macros.
  120. ;    
  121. ;
  122.  
  123.  
  124. ;
  125. ; extern UInt16 Endian16_Swap(UInt16 value)
  126. ;
  127.     IF TARGET_CPU_68K THEN
  128.         Macro
  129.         _Endian16_Swap &Dn
  130.             IF &Dn = '' THEN
  131.                 ROL.W    #8,D0
  132.             ELSE
  133.                 ROL.W    #8,&Dn
  134.             ENDIF
  135.         Endm
  136.     ENDIF
  137.  
  138. ;
  139. ; extern UInt32 Endian32_Swap(UInt32 value)
  140. ;
  141.     IF TARGET_CPU_68K THEN
  142.         Macro
  143.         _Endian32_Swap &Dn
  144.             IF &Dn = '' THEN
  145.                 ROL.W    #8,D0
  146.                 SWAP    D0
  147.                 ROL.W    #8,D0
  148.             ELSE
  149.                 ROL.W    #8,&Dn
  150.                 SWAP    &Dn
  151.                 ROL.W    #8,&Dn
  152.             ENDIF
  153.         Endm
  154.     ENDIF
  155.  
  156.  
  157.  
  158.     ENDIF ; __ENDIAN__ 
  159.  
  160.